package org.example;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.image.ImageView;
import javafx.scene.layout.*;
import javafx.stage.Stage;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;


public class GISGUI extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("JavaFX GIS System");
        // 侧边栏用于显示导入的文件列表和图层勾选列表
        ImportedObjectList importedObjectList = new ImportedObjectList();
        // 创建菜单栏
        MenuBar menuBar = new MenuBar();
        Menu fileMenu = new Menu("文件");
        MenuItem openMenuItem = new MenuItem("导入图片");
        MenuItem openShapeFileMenuItem = new MenuItem("导入shp文件");
        MenuItem closeMenuItem = new MenuItem("关闭图片");
        MenuItem closeShapeFileMenuItem = new MenuItem("关闭shp文件");
        fileMenu.getItems().addAll(
                openMenuItem,
                openShapeFileMenuItem,
                closeMenuItem,
                closeShapeFileMenuItem,
                new SeparatorMenuItem(),
                new MenuItem("退出")
        );



        menuBar.getMenus().addAll(fileMenu);

        // 创建工具栏
        ToolBar toolBar = new ToolBar();
        Button zoomInButton = new Button("放大");
        Button zoomOutButton = new Button("缩小");
        Button panButton = new Button("平移");
        toolBar.getItems().addAll(zoomInButton, zoomOutButton, panButton);

        // 地图显示区域及用于显示图片的ImageView
        Pane mapPane = new Pane();
        ImageView imageView = new ImageView();
        imageView.setFitWidth(800);
        imageView.setFitHeight(600);
        mapPane.getChildren().add(imageView);
        mapPane.setStyle("-fx-background-color: #cce7ff;");
        mapPane.setPrefSize(800, 600);

        // 状态栏
        HBox statusBar = new HBox();
        statusBar.setPadding(new Insets(5));
        statusBar.setStyle("-fx-background-color: #d3d3d3;");
        Label statusLabel = new Label("Status: Ready");
        statusBar.getChildren().add(statusLabel);

        // 布局管理
        BorderPane root = new BorderPane();
        root.setTop(new VBox(menuBar, toolBar));
        root.setCenter(mapPane);
        root.setLeft(importedObjectList.getListView());  // 使用ImportedObjectList的ListView
        root.setBottom(statusBar);

        // 场景设置
        Scene scene = new Scene(root, 1024, 768);
        primaryStage.setScene(scene);

        // 创建FileHandler实例用于处理文件相关操作
        FileHandler fileHandler = new FileHandler(primaryStage, imageView);
        openMenuItem.setOnAction(event -> {
            fileHandler.handleOpenImage();
            importedObjectList.addImportedObject(fileHandler.getFileName());  // 假设FileHandler有获取文件名的方法
        });
        closeMenuItem.setOnAction(event -> {
            fileHandler.handleCloseImage();
            // 这里可以根据关闭逻辑从importedObjectList中移除相应的文件名
        });

        // 创建ShapeFileHandler实例用于处理文件相关操作
//        ShapefileHandler shapeFileHandler = new ShapefileHandler(primaryStage, imageView);
//        openMenuItem.setOnAction(event -> {
//            shapeFileHandler.handleOpenShapefile();
//            importedObjectList.addImportedObject(shapeFileHandler.getFileName());  // 假设FileHandler有获取文件名的方法
//        });
//        closeMenuItem.setOnAction(event -> {
//            shapeFileHandler.handleCloseShapefile();
//            // 这里可以根据关闭逻辑从importedObjectList中移除相应的文件名
//        });

        // 创建ImageOperationHandler实例用于处理图片操作
        ImageOperationHandler imageOperationHandler = new ImageOperationHandler(imageView);
        zoomInButton.setOnAction(event -> imageOperationHandler.zoomIn());
        zoomOutButton.setOnAction(event -> imageOperationHandler.zoomOut());


        // 创建ImageDragHandler实例用于处理鼠标拖动图片操作
        ImageDragHandler imageDragHandler = new ImageDragHandler(imageView);

        // 例如，可以在这里调整灵敏度，数值越大越灵敏
        imageDragHandler.setSensitivity(0.6);

        primaryStage.setScene(scene);
        primaryStage.show();
    }
}